/* 
 * Autores:
 *      Jonathan Lopez  11106
 *      Jorge Martínez  11237
 * 
 * Archivo: Archivador.java
 * Última Revision: $Rev: 40 $
 *      Fecha: $Date: 2011-09-01 15:01:41 +0000 (Thu, 01 Sep 2011) $
 */

package Archivador;

import java.util.Scanner;
import java.util.ArrayList;
import java.io.*;

/**
 * Se encarga de dar acceso a los archivos persistentes a cada uno de los
 * registros.
 * 
 * @author Jonathan López
 * @author Jorge Martinez
 */
public class Archivador {
    /**
     * Lee todos los datos del registro con el nombre dado. Los devuelve como
     * un arreglo de Strings, donde cada elemento representa una línea.
     * @param nombreRegistro nombre del registro que se quiere leer. El
     * nombre del archivo a leer es sacado a través de la clase Informador.
     * @return las líneas del registro leído
     */
    public static String[] leerRegistro( String nombreRegistro ){
        // Obtener el nombre del archivo
        String nombreArchivo = Informador.obtenerDato(nombreRegistro);
        if( nombreArchivo == null || nombreArchivo.equals("") )
            return null;
        
        // Abrir el archivo
        Scanner in;
        try{
            in = new Scanner( new File(nombreArchivo) );
        } catch( FileNotFoundException e ){
            return null;
        }
        
        // Leer el archivo
        ArrayList<String> lineas = new ArrayList<String>();
        while( in.hasNextLine() )
            lineas.add( in.nextLine() );
        
        return lineas.toArray( new String[0] );
    }
    
    /**
     * Guarda las líneas de texto dadas en el registro con el nombre dado.
     * @param nombreRegistro nombre del registro que se quiere leer. El
     * nombre del archivo a leer es sacado a través de la clase Informador.
     * @param lineas arreglo de String con las líneas de texto a escribir. Cada
     * elemento representa una línea diferente en el archivo.
     * @return regresa true si la operación fue exitosa, false en caso contrario.
     */
    public static boolean guardarRegistro( String nombreRegistro, String[] lineas ){
        // Validar lineas
        if( lineas == null || lineas.length == 0 )
            return false;
        
        // Obtiene la ruta del archivo
        String nombreArchivo = Informador.obtenerDato( nombreRegistro );
        if( nombreArchivo == null || nombreArchivo.equals("") ){
            // Creamos uno nuevo
            nombreArchivo = nombreRegistro + ".dat";
            Informador.cambiarDato(nombreRegistro, nombreArchivo);
        }
        
        // Abre el archivo de escritura
        try{
            FileWriter archivo = new FileWriter( nombreArchivo, false );
            PrintWriter escritor = new PrintWriter( archivo );
            
            // Escribe una a una las lineas
            for( String lineaActual: lineas )
                escritor.println( lineaActual );
            escritor.flush();
            
        } catch ( IOException e ){
            // TODO: Poner una entrade en el log
            System.out.println("ERROR: No se pudo escribir al archivo " + nombreArchivo );
            return false;
        }
        
        return true;
    }
}
